import socket
import time
import struct

#数据包帧头/尾
START_BYTE = b'\x55\xAA\xFF\xFE'
END_BYTE = b'\xFE\xFF\xAA\x55'
TYPE_ID = b'\x01'

#机柜帧头/尾
CAB_START = b'\x55\xAA'
CAB_END = b'\xAA\x55'
CAB_NUMBER = b'\x01' 

#机箱帧头/尾
CHASSIS_START = b'\xFF\xFE'
CHASSIS_END = b'\xFE\xFF'

CHASSIS_NUMBER = b'\x01'

#包数据INT
PAG_TYPE = b'\x01'
PAG_MAPING = b'\x00\x01'


BUN = [
    #数据包帧头
    b'\x55\xAA\xFF\xFE'

    #类型id 数据包长度119字节 3
    b'\x01\x00\x77'

    #机柜1 4
    b'\x55\xAA\x01\x02'
    #机箱1 4
    b'\xFF\xFE\x01\x02'
    #包1 14
    b'\x01\x00\x01\x00\x01\x8c\x88\x7F\xEA\x01\x01\x01\x01\x01'
    #包2 14
    b'\x03\x00\x03\x00\x01\x8c\x88\x7F\xEA\x02\x03\x03\x03\x03'
    #机箱帧尾 2
    b'\xFE\xFF'

    #机箱1 4
    b'\xFF\xFE\x02\x02'
    #包1 14
    b'\x04\x00\x05\x00\x01\x8c\x88\x7F\xEA\x03\x04\x04\x04\x04'
    #包2 14
    b'\x05\x00\x05\x00\x01\x8c\x88\x7F\xEA\x04\x05\x05\x05\x05'
    #机箱帧尾 2
    b'\xFE\xFF'
    #机柜帧尾 2
    b'\xAA\x55'

    #机柜2 4
    b'\x55\xAA\x02\x01'
    #机箱1 4
    b'\xFF\xFE\x01\x02'
    #包1 14 
    b'\x07\x00\x07\x00\x01\x8c\x88\x7F\xEA\x05\x07\x07\x07\x07'
    #包2 14 
    b'\x08\x00\x08\x00\x01\x8c\x88\x7F\xEA\x06\x08\x08\x08\x08'
    #机箱帧尾 2
    b'\xFE\xFF'

    #机柜帧尾 2
    b'\xAA\x55'

    #校验 2
    b'\x00\x77'

    #包尾 4
    b'\xFE\xFF\xAA\x55'
]



THAT = ('192.168.0.121', 12345)
THIS = ('127.0.0.1', 12345)

# print(START_BYTE.decode('utf-16'))
# print(BUN)

def current_epoch_time_in_milliseconds():

    # 获取当前时间的纪元时，单位为秒
    current_epoch_time = time.time()

    # 将纪元时转换为毫秒，并取整
    milliseconds = int(current_epoch_time * 1000)

    hex_representation = milliseconds.to_bytes(6, byteorder='big').hex()

    byte_representation = bytes.fromhex(hex_representation)

    return byte_representation


#文档中的数据
FULL2 = b'\x55\xAA\xFF\xFE\x01\x00\x77\x55\xAA\x01\x02\xFF\xFE\x01\x02\x01\x00\x01\x01\x8C\x57\xEC\x28\x60\x01\x00\x00\x01\x01\x03\x00\x03\x01\x8C\x57\xEC\x28\x60\x02\x00\x00\x00\x03\xFE\xFF\xFF\xFE\x02\x02\x04\x00\x05\x01\x8C\x57\xEC\x28\x60\x03\x04\x04\x04\x04\x05\x00\x05\x01\x8C\x57\xEC\x28\x60\x04\x00\x00\x05\x05\xFE\xFF\xAA\x55\x55\xAA\x02\x01\xFF\xFE\x01\x02\x07\x00\x07\x01\x8C\x57\xEC\x28\x60\x05\x00\x00\x00\x07\x08\x00\x08\x01\x8C\x57\xEC\x28\x60\x06\x08\x08\x08\x08\xFE\xFF\xAA\x55\x79\x58\xFE\xFF\xAA\x55'



def start_client(data):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    client_socket.connect(THAT)
    
    client_socket.send(data)

    client_socket.close()



if __name__ == "__main__":
    import threading

    TIME = current_epoch_time_in_milliseconds()
    print(TIME)
    BAG0 = b'\x01\x00\x77\x55\xAA\x01\x02\xFF\xFE\x01\x02\x01\x00\x01\x01\x8C\x57\xEC\x28\x60\x01\x00\x00\x01\x01\x03\x00\x03\x01\x8C\x57\xEC\x28\x60\x02\x00\x00\x00\x03\xFE\xFF\xFF\xFE\x02\x02\x04\x00\x05\x01\x8C\x57\xEC\x28\x60\x03\x04\x04\x04\x04\x05\x00\x05\x01\x8C\x57\xEC\x28\x60\x04\x00\x00\x05\x05\xFE\xFF\xAA\x55\x55\xAA\x02\x01\xFF\xFE\x01\x02\x07\x00\x07\x01\x8C\x57\xEC\x28\x60\x05\x00\x00\x00\x07\x08\x00\x08\x01\x8C\x57\xEC\x28\x60\x06\x08\x08\x08\x08\xFE\xFF\xAA\x55'
    BAG1 = b'\x01\x00\x77\x55\xAA\x01\x02\xFF\xFE\x01\x02\x01\x00\x01'+TIME+b'\x01\x00\x00\x01\x01\x03\x00\x03'+TIME+b'\x02\x00\x00\x00\x03\xFE\xFF\xFF\xFE\x02\x02\x04\x00\x05'+TIME+b'\x03\x04\x04\x04\x04\x05\x00\x05'+TIME+b'\x04\x00\x00\x05\x05\xFE\xFF\xAA\x55\x55\xAA\x02\x01\xFF\xFE\x01\x02\x07\x00\x07'+TIME+b'\x05\x00\x00\x00\x07\x08\x00\x08'+TIME+b'\x06\x08\x08\x08\x08\xFE\xFF\xAA\x55'
    
    sum_result = sum(int(byte) for byte in BAG1) & 0xFFFF
    hex_representation = sum_result.to_bytes(2, byteorder='big').hex()
    byte_representation = bytes.fromhex(hex_representation)
    print(sum_result)
    print(hex_representation)
    print(byte_representation.hex())

    data = START_BYTE + BAG1 + byte_representation + END_BYTE

    print(data)

    client_thread = threading.Thread(target=start_client(data))

    client_thread.start()

    client_thread.join()
